package cn.stacey.blog.utils;

import java.io.IOException;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * 创建一个SqlSessionFactory单例
 * 全局唯一的
 * @author 袁
 *
 */
public class SessionFactoryUtils {
	//静态变量是类级别的，不是实例级别的，引用时不需要创建对象，引用类就可以
	private static SqlSessionFactory factory;
	public static SqlSessionFactory getFactory() {
		
		if(factory==null) {
			//factory只初始化一次,只在初始化的时候做线程同步
			//线程一二判断为空都进来,线程返回factory后,线程二又进去一次,所以还需要判断一次
			//双重检查
			//熟悉单例模式，并知道单例里面怎么做同步
			synchronized (SessionFactoryUtils.class) {
				if(factory==null) {
					
					try {
						factory = new SqlSessionFactoryBuilder().build(
								Resources.getResourceAsStream("mybatis.xml"));
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			
		}
	}
		return factory;
	}
}
